// pages/cart/index.js
Page({

    data: {
        //收货地址  默认空对象
        address: {},
        //购物车商品数据,
        cart: [],
        //全选按钮的状态  默认就是不全选
        isAllChecked: false,
        //商品的总价格 勾选才统计
        totalPrice: 0,
        //商品的总数量 勾选才统计
        totalNum: 0
    },

    /**
     * 生命周期函数--监听页面加载
     */
    onLoad: function(options) {

    },
    //页面显示就触发的函数  
    onShow() {
        //获取缓存中的地址数据
        let address = wx.getStorageSync("address");
        //获取缓存中的购物车商品数据
        let cart = wx.getStorageSync("cart") || [];
        //判断全选按钮的状态  如果全部选中就是true  有一个没选中就是false
        let isAllChecked = cart.length == 0 ? false : cart.every(element => element.checked);
        //拼接数据
        if (address.cityName) {
            address.all = address.cityName + address.countyName + address.detailInfo;
        }
        //保存地址信息  保存购物车商品信息
        this.setData({
            address,
            cart,
            isAllChecked
        });
        //更新总价格和总数量
        this.updataTotal();
    },
    //获取收货地址点击后的事件
    async getLoaction(e) {
        //try catch 处理用户取消授权的处理信息
        try {
            let result = await wx.chooseAddress();
            // console.log(result);
            wx.setStorageSync("address", result);

        } catch (error) {
            console.log(error);
            wx.showToast({
                title: '请重新授权',
                icon: 'error',
                mask: true,
            });

        }

    },
    //更新总商品价格和数量的函数
    updataTotal() {
        let cart = this.data.cart;
        let totalNum = 0;
        let totalPrice = 0;
        cart.forEach((element, index) => {
            if (element.checked) { //这个商品是被选中的
                totalNum += element.num;
                totalPrice += element.goods_price * element.num;
            }
        });
        this.setData({
            totalNum,
            totalPrice
        });
    },
    //修改商品选中状态事件侦听函数
    handleChkItemChange(e) {
        //获取当前商品的id  将cart里面的对应商品 的checked属性取反
        let goods_id = e.currentTarget.dataset.id;
        let cart = this.data.cart;
        cart.forEach(element => {
            if (element.goods_id == goods_id) {
                //取反
                element.checked = !element.checked;
            }
        });
        //判断全选按钮的状态  如果全部选中就是true  有一个没选中就是false
        let isAllChecked = cart.length == 0 ? false : cart.every(element => element.checked);
        this.setData({
            cart,
            isAllChecked
        });
        //修改缓存中的数据
        wx.setStorageSync("cart", cart);
        //更新总价格和总数量
        this.updataTotal();
    },
    //修改全选状态事件侦听函数
    handleChkAllChange() {
        //因为 checkbox 的数据绑定是单向的,只有js中数据改变才能影响html结构,而html中的复选框改变是不影响js中的数据的,但是却能触发change事件
        //获取当前的全选状态 直接 this.data.isAllChecked
        let isAllChecked = !this.data.isAllChecked;
        //另所有购物车商品的checked属性跟随 this.data.isAllChecked
        let cart = this.data.cart;
        cart.forEach(element => {
            element.checked = isAllChecked;
        });
        this.setData({
            cart,
            isAllChecked
        });
        //更新缓存数据
        wx.setStorageSync("cart", cart);
        //更新商品总价格和总数量
        this.updataTotal();
    },
    //编辑商品数量加减的点击事件侦听函数
    handleNumEdit(e) {
        //获取用户是要加还是减商品数量    //获取索引
        let step = e.currentTarget.dataset.step - 0; //获取步长
        let goods_id = e.currentTarget.dataset.id; //获取要改变数量的商品id
        let cart = this.data.cart;
        let deleteIndex = -1; //-1 不需要删除商品  其他则要
        cart.forEach((item, index) => {
            if (item.goods_id == goods_id) {
                item.num += step;
                //判断当前商品数量是否为0
                if (item.num <= 0) {
                    //删除商品标识
                    deleteIndex = index;
                }
            }
        });
        //判断是否要删除商品
        if (deleteIndex == -1) { //不需要删除
            //保存数据
            this.setData({ cart });
            //更新缓存中的数据
            wx.setStorageSync("cart", cart);
            //更新总价格和总数量
            this.updataTotal();
        } else { //需要删除
            wx.showModal({
                title: '要移除商品吗?',
                content: '',
                showCancel: true,
                cancelText: '取消',
                cancelColor: '#000000',
                confirmText: '确定',
                confirmColor: '#3CC51F',
                success: (result) => {
                    if (result.confirm) { //确认删除
                        cart.splice(deleteIndex, 1);
                        //保存数据
                        this.setData({ cart });
                        //更新缓存中的数据
                        wx.setStorageSync("cart", cart);
                        //更新总价格和总数量
                        this.updataTotal();
                    } else {
                        //不想删除了
                        // 无事发生
                    }
                }
            });

        }
        // //保存数据
        // this.setData({ cart });
        // //更新缓存中的数据
        // wx.setStorageSync("cart", cart);
        // //更新总价格和总数量
        // this.updataTotal();
    },
    //结算功能 
    handlePay() {
        //获取地址和商品总数量信息
        let { address, totalNum } = this.data;
        //判断是否可以结算
        if (totalNum == 0) { //没选商品傻逼
            wx.showToast({
                title: '请选择商品',
                icon: 'none',
                duration: 1500,
                mask: true,
            });
            return; //结束点击事件
        };
        if (!address.detailInfo) { //没填收货地址
            wx.showToast({
                title: '请填写收货地址',
                icon: 'none',
                duration: 1500,
                mask: true,
            });
            return; //结束点击事件
        };
        //走到这一步说明可以结算了
        wx.navigateTo({
            url: '/pages/pay/index',
        });

    }

})